/*
 * Settings.hpp
 *
 *  Created on: 09.05.2011
 *      Author: mifodix
 */

#ifndef SETTINGS_HPP_
#define SETTINGS_HPP_

#ifndef __cplusplus
#error Need C++-compile to process this file
#endif

#include <list>
#include <algorithm>
#include <string.h>
#include "MacIP.hpp"
#include "NetUtils.hpp"
/*
 *
 */
class Settings
{
private:
	uint32_t subnet;
	uint32_t netmask;
	uint32_t server;
	std::list<uint32_t> routers;
	std::list<uint32_t> domainNameServers;
	uint32_t rangeBegin;
	uint32_t rangeEnd;
	uint32_t defaultLeaseTime;
	uint32_t maxLeaseTime;
	std::list<MacIP> reservedIPs;
public:
	Settings();
	virtual ~Settings();
    uint32_t GetDefaultLeaseTime() const;
    std::list<uint32_t> GetDomainNameServers() const;
    uint32_t GetMaxLeaseTime() const;
    uint32_t GetNetmask() const;
    uint32_t GetRangeBegin() const;
    uint32_t GetRangeEnd() const;
    std::list<uint32_t> GetRouters() const;
    uint32_t GetServer() const;
    uint32_t GetSubnet() const;
    void SetDefaultLeaseTime(uint32_t defaultLeaseTime);
    void SetMaxLeaseTime(uint32_t maxLeaseTime);
    void SetNetmask(uint32_t netmask);
    void SetRangeBegin(uint32_t rangeBegin);
    void SetRangeEnd(uint32_t rangeEnd);
    void SetServer(uint32_t server);
    void SetSubnet(uint32_t subnet);
    bool AddRouter(uint32_t router);
    bool AddDomainNameServer(uint32_t dns);
    bool AddReservedIP(const char *mac, size_t macSize, uint32_t ip);
    uint32_t FindReservedIP(const char *mac);
    bool FindReservedIP(uint32_t ip);
    //перегруженные варианты для IP, заданного строкой
    bool SetNetmask(const char* netmask);
    bool SetRangeBegin(const char* rangeBegin);
    bool SetRangeEnd(const char* rangeEnd);
    bool SetServer(const char* server);
    bool SetSubnet(const char* subnet);
    bool AddRouter(const char* router);
    bool AddDomainNameServer(const char* dns);
    bool AddReservedIP(const char *mac, size_t macSize, const char* ip);
    bool IsInRange(uint32_t ip);
};

#endif /* SETTINGS_HPP_ */
